package decorate;

import decorate.service.Shape;
import decorate.service.impl.CircleImpl;
import decorate.service.impl.RectangleImpl;
import decorate.service.impl.RedShapeDecorate;
//使用red装饰器来装饰shape对象

/**
 * TODO 装饰器模式（Decorator Pattern）允许向一个现有的对象添加新的功能，同时又不改变其结构。这种类型的设计模式属于结构型模式，它是作为现有的类的一个包装。
 * 意图：动态地给一个对象添加一些额外的职责。就增加功能来说，装饰器模式相比生成子类更为灵活。
 */
public class demo {
    public static void main(String[] args) {
        Shape circle =  new CircleImpl();
        RedShapeDecorate redCircleDecorate = new RedShapeDecorate(circle);
        RedShapeDecorate redRectangleDecorate1 = new RedShapeDecorate(new RectangleImpl());
        circle.draw();
        redCircleDecorate.draw();
        redRectangleDecorate1.draw();

    }
}
